#===istalismanplugin===
# -*- coding: utf-8 -*-

# $Revision: 54 $
# $Author: rchiganov@gmail.com $
# $Date: 2013-08-05 07:16:38 +0000 (Mon, 05 Aug 2013) $

#---------------------------------------------------------------------------------------------------

BYTIL_LIMIT = 50
BYTIL_FILE  = 'bytil.txt'

#---------------------------------------------------------------------------------------------------

def bytil_run ( ptype, psource, pparameters ):
	if not GROUPCHATS.has_key(psource[1]):
		reply(ptype, psource, u'эта команда доступна только в конференции')
		return

	if ptype == 'private':
		reply(ptype, psource, u'не хочу... пиши в общий... :-\\')
		return

	lparam = pparameters.split()
	if len(lparam) > 1:
		reply(ptype, psource, u'читай лучше хелп по команде, а потом пиши мне... *PUNISH*')
		return
	elif len(lparam) == 0:
		lparam.append(psource[2])

	lbotnick = get_bot_nick(psource[1])
	if lparam[0] == lbotnick:
		reply(ptype, psource, u'фиг те *PUNISH*')
		return

	LFILE = 'dynamic/%s' % BYTIL_FILE
	vika_check_file(LFILE, u'[]' )
	lglob = eval(open(LFILE, 'r').read())

	LFILE = 'dynamic/%s/%s' % ( psource[1], BYTIL_FILE )
	vika_check_file(LFILE, u'[]' )
	lloc = eval(open(LFILE, 'r').read())

	llist = lglob + lloc

	if len(llist) == 0:
		reply(ptype, psource, u'нечё писать... пусто там :-(')
		return

	if lparam[0] in GROUPCHATS[psource[1]].keys():
		if GROUPCHATS[psource[1]][lparam[0]]['ishere'] != 1:
			reply(ptype, psource, u'нет его... *PARDON*')
			return
	else:
		reply(ptype, psource, u'а это хто? *SCRATCH*')
		return

	lusers = []
	for luser in GROUPCHATS[psource[1]].keys():
		if ( luser != lparam[0] ) and ( luser != lbotnick ) and ( GROUPCHATS[psource[1]][luser]['ishere'] == 1 ):
			lusers.append(luser)

	if len(lusers) != 0:
		luser = random.choice(lusers)
	else:
		reply(ptype, psource, u'нет никого... некому писать... :-(')
		return

	lphrase = random.choice(llist)
	lphrase = lphrase.replace(u'%s', lparam[0], 1)
	lphrase = lphrase.replace(u'%s', luser, 1)

	msg(psource[1], u'/me закрутила бутылочку и она указала на -> ' + luser)
	time.sleep(3)
	msg(psource[1], u'/me ' + lphrase)

#---------------------------------------------------------------------------------------------------

def bytil_update ( ptype, psource, pparameters ):
	if not GROUPCHATS.has_key(psource[1]):
		reply(ptype, psource, u'эта команда доступна только в конференции')
		return

	lparam = pparameters.split()
	if len(lparam) == 0:
		reply(ptype, psource, u'читай лучше хелп по команде, а потом пиши мне... *PUNISH*')
		return

	lglob = []

	LGFILE = 'dynamic/%s' % BYTIL_FILE
	vika_check_file(LGFILE, u'[]' )
	if lparam[0] in [ u'*', u'+' ]:
		lglob = eval(open(LGFILE, 'r').read())

	LLFILE = 'dynamic/%s/%s' % ( psource[1], BYTIL_FILE )
	vika_check_file(LLFILE, u'[]' )
	lloc = eval(open(LLFILE, 'r').read())

	#-----------------------------------------------------------------------------------------------
	# Выводим список всех фраз
	if lparam[0] == u'*':
		if len(lparam) != 1:
			reply(ptype, psource, u'что то ты не то пишешь... читай хелп по команде...')
			return
		lanswer = u' \nСписок глобальных фраз:'
		for litem in range(len(lglob)):
			lanswer += u'\n' + u'{:<5} : '.format(str(litem).decode('utf-8')) + lglob[litem]
		lanswer += u'\n\nСписок локальных фраз:'
		for litem in range(len(lloc)):
			lanswer += u'\n' + u'{:<5} : '.format(str(litem).decode('utf-8')) + lloc[litem]
		if ptype == 'public':
			reply('public', psource, u'в привате')
		reply('private', psource, lanswer)

	#-----------------------------------------------------------------------------------------------
	# Добавляем фразу в локальный справочник
	elif lparam[0] == u'+':
		if len(lparam) == 1:
			reply(ptype, psource, u'а где фраза то? *SCRATCH*')
			return

		if len(lloc) >= BYTIL_LIMIT:
			reply(ptype, psource, u'лимит фраз, равный ' + str(BYTIL_LIMIT).decode('utf-8') + ', достигнут... вы не можете больше добавлять новые фразы, пока что-нибудь не удалите')
			return

		if pparameters.count('%s') < 2:
			reply(ptype, psource, u'добавляемая фраза не имеет необходимое количество передаваемых параметров... попробуйте ещё раз')
			return

		llist = lglob + lloc
		lphrase = pparameters[1:len(pparameters)].strip()
		if lphrase not in llist:
			lloc.append(lphrase)
			write_file(LLFILE, str(lloc))
			reply(ptype, psource, u'добавила ;)')
		else:
			reply(ptype, psource, u'уже есть...')

	#-----------------------------------------------------------------------------------------------
	# Удаляем фразу из локального справочника
	elif lparam[0] == u'-':
		if len(lparam) != 2:
			reply(ptype, psource, u'что то ты не то пишешь... читай хелп по команде...')
			return
		try:
			lindex = int(lparam[1])
		except ValueError:
			reply(ptype, psource, u'это разве индекс удаляемой фразы? *SCRATCH*')
			return

		if len(lloc) < lindex + 1:
			reply(ptype, psource, u'нет такой фразы...')
			return

		lloc.pop(lindex)
		write_file(LLFILE, str(lloc))
		reply(ptype, psource, u'удалила')

	#-----------------------------------------------------------------------------------------------
	else:
		reply(ptype, psource, u'ты напиши то после команды что-нибудь нужное, а не то что пишешь сейчас...')

#---------------------------------------------------------------------------------------------------

def bytil_gupdate ( ptype, psource, pparameters ):
	if not GROUPCHATS.has_key(psource[1]):
		reply(ptype, psource, u'эта команда доступна только в конференции')
		return

	lparam = pparameters.split()
	if len(lparam) == 0:
		reply(ptype, psource, u'читай хелп по команде... всему им методом тыка, видители, надо научиться... тыкалки... :-\\')
		return

	LGFILE = 'dynamic/%s' % BYTIL_FILE
	vika_check_file(LGFILE, u'[]' )
	lglob = eval(open(LGFILE, 'r').read())

	#-----------------------------------------------------------------------------------------------
	# Добавляем фразу в глобальный справочник
	if lparam[0] == u'+':
		if len(lparam) == 1:
			reply(ptype, psource, u'а где фраза то? *SCRATCH*')
			return

		if pparameters.count('%s') < 2:
			reply(ptype, psource, u'добавляемая фраза не имеет необходимое количество передаваемых параметров... попробуйте ещё раз')
			return

		lphrase = pparameters[1:len(pparameters)].strip()
		if lphrase not in lglob:
			lglob.append(lphrase)
			write_file(LGFILE, str(lglob))
			reply(ptype, psource, u'добавила ;)')
		else:
			reply(ptype, psource, u'уже есть...')

	#-----------------------------------------------------------------------------------------------
	# Удаляем фразу из глобального справочника
	elif lparam[0] == u'-':
		if len(lparam) != 2:
			reply(ptype, psource, u'что то ты не то пишешь... читай хелп по команде...')
			return
		try:
			lindex = int(lparam[1])
		except ValueError:
			reply(ptype, psource, u'это разве индекс удаляемой фразы? *SCRATCH*')
			return

		if len(lglob) < lindex + 1:
			reply(ptype, psource, u'нет такой фразы...')
			return

		lglob.pop(lindex)
		write_file(LGFILE, str(lglob))
		reply(ptype, psource, u'удалила')

	#-----------------------------------------------------------------------------------------------
	else:
		reply(ptype, psource, u'ты напиши то после команды что-нибудь нужное, а не то что пишешь сейчас...')

#---------------------------------------------------------------------------------------------------

register_command_handler(bytil_run, 'бутылочка', ['бутылочка', 'все'], 10, 'Выбирает рандомом фразу из каталога фраз команды "бутылочка" и выводит её в общий чат', 'бутылочка [ник]', ['бутылочка', 'бутылочка Вася'])

register_command_handler(bytil_update, '!бутыль', ['бутылочка', 'все'], 20, """Смотрим и редактируем фразы команды "бутылочка".
Команда имеет обязательный параметр, значением которого будут:
* - Выводит список всех фраз команды "бутылочка"
    Синтаксис:
        !бутыль *
+ - Добавляет новую фразу в справочник. Максимально локально позволяется добавить """ + str(BYTIL_LIMIT) + """ фраз. При добавлении фразы обязательно в тексте нужно указать 2 раза сочетание символов %s. Первое сочетание %s будет значением ника указанного при команде "бутылочка", а второе %s - случайный ник из чата.
    Синтаксис:
        !бутыль + <текст фразы>
- - Удаляет фразу по индексу
    Синтаксис:
        !бутыль - <индекс фразы>""", '!бутыль <параметр> [дополнительные параметры]', ['!бутыль *', '!бутыль + говорит что %s теперь целует взасос %s', '!бутыль - 5'])

register_command_handler(bytil_gupdate, '!глоббутыль', ['бутылочка', 'все'], 80, """Добавляем и удаляем фразы в глобальной базе.
Команда имеет обязательный параметр, значением которого будут:
+ - Добавляет фразу в глобальную базу. При добавлении фразы обязательно в тексте нужно указать 2 раза сочетание символов %s. Первое сочетание %s будет значением ника, указанного при команде "бутылочка", а второе %s - случайный ник из чата.
    Синтаксис:
        !глоббутыль + <текс фразы>
- - Удаляет фразу по индексу
    Синтаксис:
        !глоббутыль - <индекс фразы>""", '!глоббутыль <параметр> [дополнительные параметры]', ['!глоббутыль + говорит что теперь %s целует взасос %s', '!глоббутыль - 5'])

#---------------------------------------------------------------------------------------------------
